package com.ssy.lingxi.order.service.web;

import com.ssy.lingxi.common.model.dto.UserLoginCacheDTO;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.order.model.vo.basic.request.MobileDeliveryDateVO;
import com.ssy.lingxi.order.model.vo.basic.request.OrderLrcVO;
import com.ssy.lingxi.order.model.vo.basic.request.OrderSeparateVO;
import com.ssy.lingxi.order.model.vo.basic.response.*;
import com.ssy.lingxi.order.model.vo.buyer.request.*;
import com.ssy.lingxi.order.model.vo.buyer.response.BuyerPayResultDetailVO;
import com.ssy.lingxi.order.model.vo.mobile.request.BuyerOrderVO;
import com.ssy.lingxi.order.model.vo.mobile.request.MobileBusinessOrderVO;
import com.ssy.lingxi.order.model.vo.mobile.response.MobileProcessDetailVO;
import com.ssy.lingxi.order.model.vo.vendor.request.AgentOrderVO;
import com.ssy.lingxi.order.model.vo.vendor.request.AgentPurchaseOrderVO;
import com.ssy.lingxi.order.model.vo.vendor.request.VendorTransferOrderVO;
import org.springframework.http.HttpHeaders;

import java.util.List;

/**
 * 订单创建相关接口
 * @author 万宁
 * @version 2.0.0
 * @date 2021-07-17
 */
public interface IOrderCreationService {
    /**
     * APP-根据供应商会员信息和商城id获取预约时长和配置配送时间段
     * @param headers HttpHeaders信息
     * @param deliveryDateVO 接口参数
     * @return 查询结果
     */
    Wrapper<OrderDeliveryDateVO> findMobileDeliveryDate(HttpHeaders headers, MobileDeliveryDateVO deliveryDateVO);

    /**
     * “进货单” - 判断是否可以合并下单
     * @param headers HttpHeaders信息
     * @param separateVO 接口参数
     * @return 查询结果
     */
    Wrapper<Void> checkOrderMergeCondition(HttpHeaders headers, OrderSeparateVO separateVO);

    /**
     * 订单创建之前，查询支付方式和支付渠道信息
     * @param headers HttpHeader信息
     * @param separateVO 接口参数
     * @return 查询结果
     */
    Wrapper<OrderProcessDetailVO> findOrderProcessPaymentSetting(HttpHeaders headers, OrderSeparateVO separateVO);

    /**
     * 订单创建之前，查询支付方式和支付渠道信息
     * @param buyerMemberId 采购会员Id
     * @param buyerRoleId   采购会员角色Id
     * @param separateVO 接口参数
     * @return 查询结果
     */
    Wrapper<OrderProcessDetailVO> findOrderProcessPaymentSetting(Long buyerMemberId, Long buyerRoleId, OrderSeparateVO separateVO);

    /**
     * 进货单下单 - 创建采购订单
     * @param headers HttpHeader信息
     * @param orderVO 接口参数
     * @return 创建结果
     */
    Wrapper<OrderCompleteVO> createBuyerOrder(HttpHeaders headers, BuyerOrderVO orderVO);

    /**
     * 代客下单 - 进货单下单
     * @param headers HttpHeader信息
     * @param orderVO 接口参数
     * @return 操作结果
     */
    Wrapper<OrderCompleteVO> createAgentPurchaseOrder(HttpHeaders headers, AgentPurchaseOrderVO orderVO);

    /**
     * 进货单下单 - 创建采购订单
     * @param headers HttpHeader信息
     * @param orderVO 接口参数
     * @return 创建结果
     */
    Wrapper<OrderCompleteVO> createMobileBuyerOrder(HttpHeaders headers, BuyerOrderVO orderVO);

    /**
     * 进货单下单 - 创建采购订单
     * @param loginUser 登录用户
     * @param orderVO 接口参数
     * @return 创建结果
     */
    Wrapper<OrderCompleteVO> createBuyerOrder(UserLoginCacheDTO loginUser, BuyerOrderVO orderVO);

    /**
     * Web - 创建拼团订单
     * @param headers HttpHeader信息
     * @param orderVO 接口参数
     * @return 创建结果
     */
    Wrapper<OrderCompleteVO> createGroupOrder(HttpHeaders headers, BuyerOrderVO orderVO);

    /**
     * App - 创建拼团订单
     * @param headers HttpHeader信息
     * @param orderVO 接口参数
     * @return 创建结果
     */
    Wrapper<OrderCompleteVO> createMobileGroupOrder(HttpHeaders headers, BuyerOrderVO orderVO);

    /**
     * 创建拼团订单
     * @param loginUser 登录用户
     * @param orderVO 接口参数
     * @return 创建结果
     */
    Wrapper<OrderCompleteVO> createGroupOrder(UserLoginCacheDTO loginUser, BuyerOrderVO orderVO);

    /**
     * Web积分商城 - 创建积分订单
     * @param headers HttpHeader信息
     * @param orderVO 接口参数
     * @return 创建结果
     */
    Wrapper<OrderCompleteVO> createPointsOrder(HttpHeaders headers, BuyerPointsOrderVO orderVO);

    /**
     * App - 创建积分订单
     * @param headers HttpHeader信息
     * @param orderVO 接口参数
     * @return 创建结果
     */
    Wrapper<OrderCompleteVO> createMobilePointsOrder(HttpHeaders headers, BuyerPointsOrderVO orderVO);

    /**
     * 积分商城 - 创建积分订单
     * @param loginUser 登录用户
     * @param orderVO 接口参数
     * @return 创建结果
     */
    Wrapper<OrderCompleteVO> createPointsOrder(UserLoginCacheDTO loginUser, BuyerPointsOrderVO orderVO);

    /**
     * 订单支付
     * @param headers HttpHeader信息
     * @param payVO 接口参数
     * @return 支付链接（在线支付）
     */
    Wrapper<PayResultDetailVO> orderPay(HttpHeaders headers, BuyerMergePayVO payVO);

    /**
     * 查询支付结果
     * @param headers HttpHeader信息
     * @param resultVO 接口参数
     * @return 支付结果
     */
    Wrapper<BuyerPayResultDetailVO> findPayResult(HttpHeaders headers, BuyerPayResultVO resultVO);

    /**
     * 采购订单 - 新增SRM订单
     * @param headers HttpHeader信息
     * @param orderVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> createSrmOrder(HttpHeaders headers, BuyerSrmOrderVO orderVO);

    /**
     * 采购订单 - 修改SRM订单
     * @param headers HttpHeader信息
     * @param updateVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> updateSrmOrder(HttpHeaders headers, BuyerSrmOrderUpdateVO updateVO);

    /**
     * “待新增订单” - 创建B2B订单
     * @param headers Http头部信息
     * @param orderVO 接口参数
     * @return 创建结果
     */
    Wrapper<Void> createBusinessOrder(HttpHeaders headers, BuyerBusinessOrderVO orderVO);

    /**
     * “待新增订单” - 修改B2B订单
     * @param headers Http头部信息
     * @param orderVO 接口参数
     * @return 创建结果
     */
    Wrapper<Void> updateBusinessOrder(HttpHeaders headers, BuyerBusinessOrderUpdateVO orderVO);

    /**
     * “新增现货采购订单” - 创建现货采购订单
     * @param headers Http头部信息
     * @param orderVO 接口参数
     * @return 新增结果
     */
    Wrapper<Void> createPurchaseOrder(HttpHeaders headers, BuyerPurchaseOrderVO orderVO);

    /**
     * “新增现货采购订单” - 修改现货采购订单
     * @param headers Http头部信息
     * @param orderVO 接口参数
     * @return 新增结果
     */
    Wrapper<Void> updatePurchaseOrder(HttpHeaders headers, BuyerPurchaseOrderUpdateVO orderVO);

    /**
     * 请购单订单 - 新增订单
     * @param headers Http头部信息
     * @param orderVO 接口参数
     * @return 新增结果
     */
    Wrapper<Void> createRequisitionOrder(HttpHeaders headers, RequisitionOrderCreateVO orderVO);

    /**
     * 请购单订单 - 修改订单
     * @param headers Http头部信息
     * @param orderVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> updateRequisitionOrder(HttpHeaders headers, RequisitionOrderUpdateVO orderVO);

    /**
     * 销售订单 - 转单
     * @param headers Http头部信息
     * @param transferOrderVO 接口参数
     * @return 转单结果
     */
    Wrapper<Void> transferOrders(HttpHeaders headers, VendorTransferOrderVO transferOrderVO);

    /**
     * App - 订单创建之前，查询支付方式和支付渠道信息
     * @param headers HttpHeader信息
     * @param separateVO 接口参数
     * @return 查询结果
     */
    Wrapper<MobileProcessDetailVO> findMobileProcessPaymentSetting(HttpHeaders headers, OrderSeparateVO separateVO);

    /**
     * App - 创建B2B订单
     * @param headers HttpHeader信息
     * @param orderVO 接口参数
     * @return 创建结果
     */
    Wrapper<OrderCompleteVO> createMobileBusinessOrder(HttpHeaders headers, MobileBusinessOrderVO orderVO);

    /**
     * 代客下单 - 创建订单
     * @param headers HttpHeader信息
     * @param orderVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> createAgentOrder(HttpHeaders headers, AgentOrderVO orderVO);

    /**
     * “进货单”-待结算订单-查询积分列表
     * @param headers HttpHeader信息
     * @param lrcVO 接口参数
     * @return 查询结果
     */
    Wrapper<List<OrderLrcDetailVO>> getLrcList(HttpHeaders headers, OrderLrcVO lrcVO);

    /**
     * “进货单”-待结算订单-查询积分列表-【代理使用】
     * @param headers HttpHeader信息
     * @param lrcVO 接口参数
     * @return 查询结果
     */
    Wrapper<List<OrderLrcDetailVO>> getLrcListByAgent(HttpHeaders headers, OrderLrcVO lrcVO);
}
